File manager - Edit - /home/autoph/public_html/projects/app/Http/Controllers/API/v1/ApproverController.php
Back
<?php namespace App\Http\Controllers\API\v1; use App\Http\Controllers\Controller; use App\Models\Approver; use App\Models\Dealership; use App\Models\Employee; use App\Models\OrganizationUnit; use DateTime; use Illuminate\Http\Request; use Illuminate\Http\Response; use Illuminate\Support\Facades\Auth; use Illuminate\Support\Facades\DB; use Illuminate\Support\Facades\Validator; use Illuminate\Validation\Rule; use Throwable; class ApproverController extends Controller { public function index(Request $request) { // $keyword = $request->input('keyword', ''); $perPage = $request->input('per_page',PHP_INT_MAX); $sortBy = $request->input('sortBy', ''); $sortType = $request->input('sortType', ''); $data = OrganizationUnit::with( [ 'dealership' => function ($query) { $query->with([ 'dealership_approver' => function ($dealership_approver) { $dealership_approver->where('type', '=', 'dealership'); }, ]); }, 'group_division' => function ($query) { $query->with([ 'group_division_approver' => function ($group_division_approver) { $group_division_approver->where('type', '=', 'group'); }, ]); }, 'division' => function ($query2) { $query2->with([ 'division_approver' => function ($division_approver) { $division_approver->where('type', '=', 'division'); }, ]); }, 'department' => function ($query3) { $query3->with([ 'department_approver' => function ($department_approver) { $department_approver->where('type', '=', 'department'); }, ]); }, 'section' => function ($query4) { $query4->with([ 'section_approver' => function ($section_approver) { $section_approver->where('type', '=', 'section'); }, ]); }, ]); if (!empty($sortBy) && !empty($sortType)) { $data = $data->orderBy($sortBy, $sortType); } $data = $data->paginate($perPage); return response()->json($data); } public function getEmployeeApprover(String $employee_id) { $employee = Employee::where([ 'employee_id' => $employee_id, 'enabled' => 1 ]) ->whereNull('date_resign') ->first(); // dd($employee_id); $approver = []; if($employee->classification_id == 1){ $approver_result = $this->getRankAndFileApprover($employee->employee_id); } else if ($employee->classification_id == 2) { $approver_result = $this->getSupervisorApprover($employee->employee_id); } else if ($employee->classification_id == 3) { $approver_result = $this->getManagerApprover($employee->employee_id); } $imploded_approver = implode(', ', $approver_result['endorser']); $cleanedApproverArray = array_map(function($item) { return str_replace(['["', '"]'], '', $item); }, $approver_result['endorser']); $endorser = Employee::whereIn('employee_id', $cleanedApproverArray)->whereNull('date_resign') ->get(); return response()->json($endorser); } public function getMrfApprover(Request $request) { // dd($request->dealership); $employee = Auth::user(); // dd($employee); $approver = []; if($employee->employees->classification_id == 1){ $approver_result = $this->getRankAndFileApprover($employee->employees->employee_id); } else if ($employee->employees->classification_id == 2) { $approver_result = $this->getSupervisorApprover($employee->employees->employee_id); } else if ($employee->employees->classification_id == 3) { $approver_result = $this->getManagerApprover($employee->employees->employee_id); } $imploded_approver = implode(', ', $approver_result['endorser']); $cleanedApproverArray = array_map(function($item) { return str_replace(['["', '"]'], '', $item); }, $approver_result['endorser']); $endorser = Employee::with('employee_profile')->whereIn('employee_id', $cleanedApproverArray) ->get(); $endorser = $endorser->map(function ($endorser) { if ($endorser->employee_profile && $endorser->employee_profile->attachment) { $endorser->attachment = asset('storage/employee-profile/' . $endorser->employee_profile->attachment); } // Always return the $endorser object return $endorser; }); return response()->json($endorser); } public function getRankAndFileApprover($employee_id) { // get all approver to array then remove the duplicate $approvers = []; $data = Employee::with(['sectionApprover' => function ($query) { $query->where('type', 'section'); // Add your condition here }]) ->where('employee_id', $employee_id) ->whereNull('date_resign') ->first(); $approvers[] = $data->sectionApprover ? $data->sectionApprover->approvers : 'LOREMIPSUM'; $data = Employee::with(['departmentApprover' => function ($query) { $query->where('type', 'department'); // Add your condition here }]) ->where('employee_id', $employee_id) ->whereNull('date_resign') ->first(); $approvers[] = $data->departmentApprover ? $data->departmentApprover->approvers : 'LOREMIPSUM'; $data = Employee::with(['divisionApprover' => function ($query) { $query->where('type', 'division'); // Add your condition here }]) ->where('employee_id', $employee_id) ->whereNull('date_resign') ->first(); $approvers[] = $data->divisionApprover ? $data->divisionApprover->approvers : 'LOREMIPSUM'; $data = Employee::with(['groupDivisionApprover' => function ($query) { $query->where('type', 'group'); // Add your condition here }]) ->where('employee_id', $employee_id) ->whereNull('date_resign') ->first(); $approvers[] = $data->groupDivisionApprover ? $data->groupDivisionApprover->approvers : 'LOREMIPSUM'; $data = Employee::with(['dealershipApprover' => function ($query) { $query->where('type', 'dealership'); // Add your condition here }]) ->where('employee_id', $employee_id) ->whereNull('date_resign') ->first(); $approvers[] = $data->dealershipApprover ? $data->dealershipApprover->approvers : 'LOREMIPSUM'; $flattenedApprovers = collect($approvers) ->filter(fn($item) => $item !== 'LOREMIPSUM') ->map(fn($item) => json_decode($item, true)) ->flatten() ->unique() ->toArray(); $currentUser = Auth::user(); // Query the final results $getTheFinalResult = Employee::select('employees.employee_id', 'role_company_access.company_id', 'role_company_access.dealership_id') ->join('users', 'users.employee_id', '=', 'employees.employee_id') ->join('user_roles', 'user_roles.user_id', '=', 'users.id') ->join('role_company_access', 'role_company_access.role_id', '=', 'user_roles.role_id') ->whereIn('employees.employee_id', $flattenedApprovers) ->where('role_company_access.dealership_id', $currentUser->employees->dealer_id) ->whereNull('employees.date_resign') ->get(); $finalApproverIds = $getTheFinalResult->pluck('employee_id')->toArray(); $formattedResult = collect($approvers) ->filter(function ($approver) { return $approver !== 'LOREMIPSUM' && !empty($approver); }) ->map(function ($approver) use ($finalApproverIds) { $ids = json_decode($approver, true); if (is_array($ids)) { return array_intersect($ids, $finalApproverIds); } return []; }) ->flatten() ->unique() ->values() ->map(fn($id) => json_encode([$id])) ->toArray(); // dd($formattedResult); return $result = [ 'endorser' => $formattedResult ]; } public function getSupervisorApprover($employee_id) { // get all approver to array then remove the duplicate $approvers = []; $data = Employee::with(['departmentApprover' => function ($query) { $query->where('type', 'department'); // Add your condition here }]) ->where('employee_id', $employee_id) ->whereNull('date_resign') ->first(); $approvers[] = $data->departmentApprover ? $data->departmentApprover->approvers : 'LOREMIPSUM'; $data = Employee::with(['divisionApprover' => function ($query) { $query->where('type', 'division'); // Add your condition here }]) ->where('employee_id', $employee_id) ->whereNull('date_resign') ->first(); $approvers[] = $data->divisionApprover ? $data->divisionApprover->approvers : 'LOREMIPSUM'; $data = Employee::with(['groupDivisionApprover' => function ($query) { $query->where('type', 'group'); // Add your condition here }]) ->where('employee_id', $employee_id) ->whereNull('date_resign') ->first(); $approvers[] = $data->groupDivisionApprover ? $data->groupDivisionApprover->approvers : 'LOREMIPSUM'; $data = Employee::with(['dealershipApprover' => function ($query) { $query->where('type', 'dealership'); // Add your condition here }]) ->where('employee_id', $employee_id) ->whereNull('date_resign') ->first(); $approvers[] = $data->dealershipApprover ? $data->dealershipApprover->approvers : 'LOREMIPSUM'; $flattenedApprovers = collect($approvers) ->filter(fn($item) => $item !== 'LOREMIPSUM') ->map(fn($item) => json_decode($item, true)) ->flatten() ->unique() ->toArray(); $currentUser = Auth::user(); // Query the final results $getTheFinalResult = Employee::select('employees.employee_id', 'role_company_access.company_id', 'role_company_access.dealership_id') ->join('users', 'users.employee_id', '=', 'employees.employee_id') ->join('user_roles', 'user_roles.user_id', '=', 'users.id') ->join('role_company_access', 'role_company_access.role_id', '=', 'user_roles.role_id') ->whereIn('employees.employee_id', $flattenedApprovers) ->where('role_company_access.dealership_id', $currentUser->employees->dealer_id) ->whereNull('employees.date_resign') ->get(); $finalApproverIds = $getTheFinalResult->pluck('employee_id')->toArray(); $formattedResult = collect($approvers) ->filter(function ($approver) { return $approver !== 'LOREMIPSUM' && !empty($approver); }) ->map(function ($approver) use ($finalApproverIds) { $ids = json_decode($approver, true); if (is_array($ids)) { return array_intersect($ids, $finalApproverIds); } return []; }) ->flatten() ->unique() ->values() ->map(fn($id) => json_encode([$id])) ->toArray(); return $result = [ 'endorser' => $formattedResult ]; } public function getManagerApprover($employee_id) { // get all approver to array then remove the duplicate $approvers = []; $data = Employee::with(['groupDivisionApprover' => function ($query) { $query->where('type', 'group'); // Add your condition here }]) ->where('employee_id', $employee_id) ->whereNull('date_resign') ->first(); $approvers[] = $data->groupDivisionApprover ? $data->groupDivisionApprover->approvers : 'LOREMIPSUM'; $data = Employee::with(['dealershipApprover' => function ($query) { $query->where('type', 'dealership'); // Add your condition here }]) ->where('employee_id', $employee_id) ->whereNull('date_resign') ->first(); $approvers[] = $data->dealershipApprover ? $data->dealershipApprover->approvers : 'LOREMIPSUM'; // dd($approvers); $flattenedApprovers = collect($approvers) ->filter(fn($item) => $item !== 'LOREMIPSUM') ->map(fn($item) => json_decode($item, true)) ->flatten() ->unique() ->toArray(); $currentUser = Auth::user(); // Query the final results $getTheFinalResult = Employee::select('employees.employee_id', 'role_company_access.company_id', 'role_company_access.dealership_id') ->join('users', 'users.employee_id', '=', 'employees.employee_id') ->join('user_roles', 'user_roles.user_id', '=', 'users.id') ->join('role_company_access', 'role_company_access.role_id', '=', 'user_roles.role_id') ->whereIn('employees.employee_id', $flattenedApprovers) ->where('role_company_access.dealership_id', $currentUser->employees->dealer_id) ->whereNull('employees.date_resign') ->get(); $finalApproverIds = $getTheFinalResult->pluck('employee_id')->toArray(); $formattedResult = collect($approvers) ->filter(function ($approver) { return $approver !== 'LOREMIPSUM' && !empty($approver); }) ->map(function ($approver) use ($finalApproverIds) { $ids = json_decode($approver, true); if (is_array($ids)) { return array_intersect($ids, $finalApproverIds); } return []; }) ->flatten() ->unique() ->values() ->map(fn($id) => json_encode([$id])) ->toArray(); return $result = [ 'endorser' => $formattedResult ]; } public function update(Request $request, int $id) { // dd($id); $data = Approver::where('type_id', '=', $id) ->where('type', '=', $request->type) ->first(); $request['approvers'] = json_encode($request->approvers); // dd($request->all()); if (!$data) { $validator = Validator::make($request->all(), [ 'approvers' => [ 'required', ], ]); /** If validation fails return with error message */ if ($validator->fails()) { $errors = $validator->errors(); $first = $errors->getMessages(); return response()->json([ 'status' => false, 'message' => (reset($first))[0], 'errors' => $errors ], Response::HTTP_UNPROCESSABLE_ENTITY); } DB::connection()->beginTransaction(); try { $data = Approver::create($request->all()); DB::connection()->commit(); return response()->json([ 'message' => 'Record Successfully added!', 'status' => 'success', ],201); } catch (Throwable $e) { DB::connection()->rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } else { $validator = Validator::make($request->all(), [ 'approvers' => [ 'required', ], ] ); /** If validation fails return with error message */ if ($validator->fails()) { $errors = $validator->errors(); $first = $errors->getMessages(); return response()->json([ 'status' => false, 'message' => (reset($first))[0], 'errors' => $errors ], Response::HTTP_UNPROCESSABLE_ENTITY); } DB::connection()->beginTransaction(); try { $data->fill($request->all()); $data->save(); $data->touch(); DB::connection()->commit(); return response()->json([ 'message' => 'Record Successfully updated!', 'status' => 'success', 'data' => $data, ],201); } catch (Throwable $e) { DB::connection()->rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } } }
| ver. 1.4 |
.
| PHP 8.1.32 | Generation time: 0.01 |
proxy
|
phpinfo
|
Settings